package com.sgave.blog.mapper;

import com.sgave.blog.model.Blog;
import com.sgave.blog.vo.BlogVo;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author fly
 * @date 2024/1/9 16:44
 */
public interface BlogMapper {

    /**
     * 根据id查询博客内容
     * @param id 博客id
     * @return 返回博客对象
     */
    @Select("select * from blog where id = #{id}")
    Blog selectBlogById(Integer id);

    /**
     * 查询博客列表
     * @return 返回列表
     */
    @Select("select * from blog")
    List<BlogVo> selectAll();

    /**
     * 新增博客
     * @param blog 博客对象
     * @return 成功条数
     */
    @Insert("insert into blog (title, author,content,label,create_time) values (#{title},#{author},#{content},#{label},now())")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int addBlog(Blog blog);

    /**
     * 根据id查询博客内容
     * @param id 博客id
     * @return 返回博客对象
     */
    @Select("select b.*,l.name labelName from blog b LEFT JOIN label l on l.id = b.label where b.id = #{id}")
    BlogVo selectById(Integer id);

    /**
     * 根据博客标题或作者模糊查询
     * @param param 博客标题
     * @return 返回匹配到的博客列表
     */
    List<BlogVo> selectByParam(@Param("param") String param, @Param("labelId") Integer labelId);

    /**
     * 查询热点新闻
     * @param num 条数
     * @return
     */
    @Select("select id,title,author,label,read_count from blog order by read_count desc limit #{num}")
    List<BlogVo> selectHotNews(@Param("num") Integer num);

    /**
     * 阅读次数加1
     * @param id 博客id
     * @return 成功状态
     */
    @Update("update blog set read_count = read_count + 1 where id = #{id}")
    int updateReadCount(Integer id);

    /**
     * 统计标签使用的次数
     * @param labelId 标签id
     * @return 数量
     */
    @Select("select count(1) from blog where label = #{id}")
    int getLabelUseCount(@Param("id") Integer labelId);
}
